专有编解码器
预制构建的NW.js支持专有编解码器
基于Chromium的NW.js , 媒体模块本质上是相同的 .
预制构建的NW.js支持以下编解码器:
theora,vorbis,vp8,pcm_u8,pcm_s16le,pcm_s24le,pcm_f32le,pcm_s16be,pcm_s24be
同时支持demuxers:
ogg,matroska,wav
NW.js中启用编解码器
权限以及专利费 , 如果需要使用MP3以及H.264需要支付专利费用 , 获取源码使用权限 . 如果在应用中需要使用专有媒体格式 , 可以咨询律师了解相关权限内容 . 关于源码相关权限信息 , 可以[参考](https://chromium.googlesource.com/chromium/third_party/ffmpeg.git/+/master/CREDITS.chromium)
警告 , 如果没有使用特定编解码器权限 , 使用以下方法或者使用其他的解决方案 , 不能够确保应用能够正常使用以及后续的发布 .
社区获取FFmpeg文件
Chromium项目比较新的版本 , FFmpeg为内置编解码器 . 这样将不能够从Chrome官网得到FFmpeg的DLL文件 . 但可以从预编译文件社区中获取 . 另外 , 也可以通过以下方式自行构建FFmpeg .
脱离NW.js构建FFmpeg的DLL文件
如果使用预制构建的NW.js , 只能够重新构建FFmpeg的DLL文件 , 替换预制构建NW.js中的DLL文件 . 该过程需要下载大约1G大小文件以及个i编译约20G大小的NW.js文件 .
步骤 1. 从GitHub下载定制Chromium的Zip文件 . https://github.com/nwjs/chromium.src/tags中能够找到相配的版本 . 提取压缩文件到本地目录中 , 比如~/nw
, 解压之后的文件包括子目录 . 这样源码路径为~/nw/<sub-directory-name>
.
步骤 2. 获取依赖
手动获取一下依赖关系 , 以便能够重新构建NW.js .
- 从
DEPS
中 , 拷贝以下目录文件:buildtools
tools/gyp
third_party/yasm/sources/patched-yasm
third_party/ffmpeg
- 从
buildtools/<os>
中 , 下载gn
工具
download_from_google_storage --no_resume \
--platform=<platform> \
--no_auth \
--bucket chromium-gn \
-s buildtools/<os>/<gn-exe>.sha1
- `<platform>`: Windows系统使用`win32`; `darwin`; Linux系统使用`linux*`
- `<os>`: Windows系统使用`win`; Mac系统使用`mac`; Linux系统使用`linux64`
- `<gn-exe>`: Windows系统使用`gn.exe` for Windows; Mac和Linux系统使用`gn`
- 从
third_party/llvm-build
中 , [Mac和Linux]系统下载clang
工具
python tools/clang/scripts/update.py --if-needed
- 从
third_party/llvm-build
中 , [Linux]系统下载库
python build/linux/sysroot_scripts/install-sysroot.py --running-as-hook
- 从
third_party/libc++-static
中 , [Mac]系统下载libc++-static库
download_from_google_storage --no_resume \
--platform=darwin \
--no_auth \
--bucket chromium-libcpp \
-s third_party/libc++-static/libc++.a.sha1
对于Linux系统开发者 , 首次构建FFmpeg的DDL文件或者执行下一步之前 , 最好运行`build/install-build-deps.sh` . 该脚本将自动安装构建过程依赖关系 .
步骤 3. 替换BUILD.gn
代码根目录中BUILD.gn
替换以下内容:
action("dummy") {
deps = [
"//third_party/ffmpeg"
]
script = "dummy"
outputs = ["$target_gen_dir/dummy.txt"]
}
步骤 4. 使用GN工具生成Ninja文件
cd path/to/nw/source/folder
gn gen //out/nw \
--args='is_debug=false is_component_ffmpeg=true target_cpu="<target_cpu>" is_official_build=true ffmpeg_branding="Chrome"'
注: <target_cpu>
应该设置x86
或x64
代表按照32位或64位构建 .
步骤 4. 构建FFmpeg的DDL文件
ninja -C out/nw ffmpeg
You will find the DLL in out/nw
folder. The path and file name varies between platforms:
DDL文件在目录out/nw
中 . 不同系统中路径和文件名如下:
- Windows:
ffmpeg.dll
- Mac OS X:
libffmpeg.dylib
- Linux:
lib/libffmpeg.so
步骤 5. 使用刚刚构建的DDL文件替换预制构建的NW.js中对应的文件 . 不同系统中路径以及文件名如下:
- Windows:
ffmpeg.dll
- Mac OS X:
nwjs.app/Contents/Versions/<chromium-version>/nwjs Framework.framework/libffmpeg.dylib
- Linux
lib/libffmpeg.so
构建带有专有编解码器的NW.js
如果不适用官网提供的预制构建的NW.js , 可以使用以下过程 , 构建带有专有编解码器的NW.js . 参考构建详细说明以及步骤 .
步骤 1. 安装前提条件以及获取NW.js代码 , 参考构建中的前提条件以及获取代码的相关说明 .
步骤 2. 配置GN过程需要为Chrome设置ffmpeg_branding
.
步骤 3. 再次生成ninja文件 .
步骤 4. 重新构建NW.js